package com.zbkj.service.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zbkj.common.model.admin.SystemMenu;
import com.zbkj.common.request.SystemMenuRequest;
import com.zbkj.common.request.SystemMenuSearchRequest;
import com.zbkj.common.vo.MenuCheckVo;

import java.util.List;

/**
 * SystemMenuService 接口
 * +----------------------------------------------------------------------
 */
public interface SystemMenuService extends IService<SystemMenu> {

    /**
     * 获取所有权限
     *
     * @param type 系统菜单类型:1-平台 2-商户
     * @return List
     */
    List<SystemMenu> getAllPermissions(Integer type);

    /**
     * 通过用户id获取权限
     */
    List<SystemMenu> findPermissionByUserId(Integer userId);

    /**
     * 获取所有菜单
     *
     * @param type 系统菜单类型：3-平台 4-商户
     * @return List<SystemMenu>
     */
    List<SystemMenu> findAllCatalogue(Integer type);

    /**
     * 获取用户路由
     *
     * @param userId 用户id
     * @return List
     */
    List<SystemMenu> getMenusByUserId(Integer userId);

    /**
     * 商户端菜单缓存树
     *
     * @return List
     */
    List<MenuCheckVo> getMenuCacheList();

    /**
     * 获取品牌商的菜单和权限
     * @return
     */
    List<MenuCheckVo> getBrandMenuList();

    /**
     * 获取菜单缓存列表
     *
     * @param type 3-平台端，4-商户端
     * @return List
     */
    List<SystemMenu> getMenuCacheList(Integer type);

    /**
     * 平台菜单列表
     *
     * @param request 请求参数
     * @return List
     */
    List<SystemMenu> getPlatformList(SystemMenuSearchRequest request);

    /**
     * 商户菜单列表
     *
     * @param request 请求参数
     * @return List
     */
    List<SystemMenu> getMerchantList(SystemMenuSearchRequest request);

    /**
     * 行政区域菜单列表
     *
     * @param request 请求参数
     * @return List
     */
    List<SystemMenu> getRegionList(SystemMenuSearchRequest request);


    /**
     * 新增行政区域菜单列表
     *
     * @param systemMenuRequest 请求参数
     */
    Boolean addRegionMenu(SystemMenuRequest systemMenuRequest);

    /**
     * 删除行政区域端菜单
     *
     * @param id 菜单id
     * @return Boolean
     */
    Boolean deleteRegionMenu(Integer id);


    /**
     * 修改行政区域端菜单
     *
     * @param systemMenuRequest 菜单参数
     * @return Boolean
     */
    Boolean editRegionMenu(SystemMenuRequest systemMenuRequest);


    /**
     * 修改行政区域端菜单显示状态
     *
     * @param id 菜单id
     * @return Boolean
     */
    Boolean updateRegionShowStatus(Integer id);

    /**
     * 新增平台菜单
     *
     * @param systemMenuRequest 菜单参数
     * @return Boolean
     */
    Boolean addPlatformMenu(SystemMenuRequest systemMenuRequest);

    /**
     * 新增商户菜单
     *
     * @param systemMenuRequest 菜单参数
     * @return Boolean
     */
    Boolean addMerchantMenu(SystemMenuRequest systemMenuRequest);

    /**
     * 删除平台端菜单
     *
     * @param id 菜单id
     * @return Boolean
     */
    Boolean deletePlatformMenu(Integer id);

    /**
     * 删除商户端菜单
     *
     * @param id 菜单id
     * @return Boolean
     */
    Boolean deleteMerchantMenu(Integer id);

    /**
     * 修改平台端菜单
     *
     * @param systemMenuRequest 菜单参数
     * @return Boolean
     */
    Boolean editPlatformMenu(SystemMenuRequest systemMenuRequest);

    /**
     * 修改商户端菜单
     *
     * @param systemMenuRequest 菜单参数
     * @return Boolean
     */
    Boolean editMerchantMenu(SystemMenuRequest systemMenuRequest);

    /**
     * 获取菜单详情
     *
     * @param id 菜单id
     * @return SystemMenu
     */
    SystemMenu getInfo(Integer id);

    /**
     * 修改平台端菜单显示状态
     *
     * @param id 菜单id
     * @return Boolean
     */
    Boolean updatePlatformShowStatus(Integer id);

    /**
     * 修改商户端菜单显示状态
     *
     * @param id 菜单id
     * @return Boolean
     */
    Boolean updateMerchantShowStatus(Integer id);

    /**
     * 平台端菜单缓存树
     *
     * @return List
     */
    List<MenuCheckVo> getPlatformMenuCacheTree();

    /**
     * 品牌端菜单缓存树
     * @return
     */
    List<MenuCheckVo> getBrandMenuCacheTree();
    /**
     * 品牌商菜单列表
     *
     * @param request 请求参数
     * @return List
     */
    List<SystemMenu> getBrandList(SystemMenuSearchRequest request);

    /**
     * 新增品牌商菜单列表
     *
     * @param systemMenuRequest 请求参数
     */
    boolean addBrandMenu(SystemMenuRequest systemMenuRequest);

    /**
     * 删除品牌商菜单
     *
     * @param id 菜单id
     * @return Boolean
     */
    boolean deleteBrandMenu(Integer id);

    /**
     * 修改品牌商菜单
     *
     * @param systemMenuRequest 菜单参数
     * @return Boolean
     */
    boolean editBrandMenu(SystemMenuRequest systemMenuRequest);

    /**
     * 修改品牌商菜单显示状态
     *
     * @param id 菜单id
     * @return Boolean
     */
    boolean updateBrandShowStatus(Integer id);

    /**
     * 根据type，获取菜单和权限
     * @param type
     * @return
     */
    public List<SystemMenu> getMenuAndPermByType(Integer type);

    SystemMenu getName(Integer id);
}
